/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCurso;
import com.ipartek.formacion.gestformwww.modelo.ModeloDiaClase;
import com.ipartek.formacion.gestformwww.modelo.beans.Asistencia;
import com.ipartek.formacion.gestformwww.modelo.beans.Curso;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author karmele
 * 23-12-2010
 */
public class CrearFaltaAccion implements Accion {

 
    private String visualizaralumno = "visualizar-alumno-accion";

    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        AccionRouter router = null;
          AccionServlet as=(AccionServlet) servlet;
        HttpSession sesion = request.getSession();
        ArrayList<String> mensajes = new ArrayList<String>();
        ModeloDiaClase modelo = (ModeloDiaClase) servlet.getServletContext().getAttribute("ModeloDiaClase");
        ModeloCurso modeloc = (ModeloCurso) servlet.getServletContext().getAttribute("ModeloCurso");
        Asistencia asis = new Asistencia();
        ArrayList<String> errores = null;
        Curso curso = new Curso();

        if (sesion.getAttribute("usuario") == null) {
            router = new AccionRouter("inicio", false);
        } else {
            if (request.getMethod().equalsIgnoreCase("POST")) {
                asis.setCurId(Integer.parseInt(request.getParameter("idCurso")));
                asis.setAluId(Integer.parseInt(request.getParameter("idAlumno")));
                asis.setAsiFch(Verificador.stringAFecha(request.getParameter("calFch")));
                asis.setAsiJustificada(request.getParameter("asiJustificada"));
                asis.setAsiObserv(request.getParameter("calObserv"));
                errores = asis.validar();
                if (!errores.isEmpty()) {
                    request.setAttribute("errores", errores);
                } else if (Verificador.sinReenvio("aleatorioCrearAsistencia", sesion, request)) {
                    try {
                        if (!modelo.buscarAsistencia(asis.getAluId(), asis.getCurId(), asis.getAsiFch())) {//Asistencia no encontrada
                            curso = modeloc.visualizarCurso(asis.getCurId());
                            Timestamp fechaIni = curso.getCurFchaInReal();
                            Timestamp fechaFin = curso.getCurFchaFinReal();
                            Timestamp fechaAsis = Verificador.stringAFecha(request.getParameter("calFch"));
                            if ((fechaIni.before(fechaAsis) || fechaIni.equals(fechaAsis)) && (fechaFin.after(fechaAsis) || fechaFin.equals(fechaAsis))) {//Fechas de la falta dentro del rango de fechas del curso
                                modelo.CrearFalta(asis);
                                mensajes.add("guardar-falta-correcto");
                                sesion.setAttribute("mensajes", mensajes);
                            } else {
                                errores.add("error-fechas-rango");
                                errores.add(" " + Verificador.formatearFecha(fechaIni) + " y " + Verificador.formatearFecha(fechaFin));
                                request.setAttribute("errores", errores);
                            }
                        } else {//Asistencia encontrada
                            errores.add("error-fecha-duplicada");
                            request.setAttribute("errores", errores);
                        }
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(CrearFaltaAccion.class.getName()).log(Level.SEVERE, null, ex);
                        errores.add(ex.getMessage());
                        request.setAttribute("errores", errores);
                    }
                }
            }
            try {
                router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizaralumno),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(CrearFaltaAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(CrearFaltaAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(CrearFaltaAccion.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
        return router;
    }

   
}
